# 模块名称（与源文件名保持一致，不含.c后缀）
MODULE_NAME := kspeed

# 源文件列表（如果有多个.c文件，用空格分隔）
SRCS := speed.c oppool.c debug_file.c

# 内核源码路径：默认使用当前系统正在运行的内核头文件
KDIR ?= /lib/modules/$(shell uname -r)/build

# 当前目录路径
PWD := $(shell pwd)

# 生成的模块目标
obj-m += $(MODULE_NAME).o

# 将源文件关联到模块目标（如果多个源文件，需要指定）
$(MODULE_NAME)-objs := $(SRCS:.c=.o)

# 默认目标：编译模块
default:
	@echo "Compiling $(MODULE_NAME) module..."
	$(MAKE) -C $(KDIR) M=$(PWD) modules

# 清理编译生成的文件
clean:
	@echo "Cleaning $(MODULE_NAME) module..."
	$(MAKE) -C $(KDIR) M=$(PWD) clean
	rm -f *.mod.c *.mod.o *.o *.ko *.symvers *.order *~

# 安装模块（需要root权限）
install:
	@echo "Installing $(MODULE_NAME) module..."
	sudo insmod $(MODULE_NAME).ko

# 卸载模块（需要root权限）
uninstall:
	@echo "Uninstalling $(MODULE_NAME) module..."
	sudo rmmod $(MODULE_NAME)

# 查看模块日志（显示最近10条）
log:
	dmesg | grep -i "$(MODULE_NAME)" | tail -n 10

# 伪目标声明（避免与同名文件冲突）
.PHONY: default clean install uninstall log